package com.tywj.lib.route

import android.os.Parcelable
import java.io.Serializable

/**
 * <pre>
 *     author : June Yang
 *     time   : 2020/5/8
 *     desc   : 获取路由参数接口
 *     version: 1.0.0
 * </pre>
 */
interface IRouteParam {

    /**
     * 获取Int类型参数的值
     * @param key 参数名称
     * @param defaultValue 没有获取到该参数时返回的默认值，默认是0
     * @return 参数的值
     */
    fun getInt(key: String, defaultValue: Int = 0): Int

    /**
     * 获取Long类型参数的值
     * @param key 参数名称
     * @param defaultValue 没有获取到该参数时返回的默认值，默认是: 0L
     * @return 参数的值
     */
    fun getLong(key: String, defaultValue: Long = 0L): Long

    /**
     * 获取Float类型参数的值
     * @param key 参数名称
     * @param defaultValue 没有获取到该参数时返回的默认值，默认是: 0f
     * @return 参数的值
     */
    fun getFloat(key: String, defaultValue: Float = 0f): Float

    /**
     * 获取Double类型参数的值
     * @param key 参数名称
     * @param defaultValue 没有获取到该参数时返回的默认值，默认是: 0.0
     * @return 参数的值
     */
    fun getDouble(key: String, defaultValue: Double = 0.0): Double

    /**
     * 获取Boolean类型参数的值
     * @param key 参数名称
     * @param defaultValue 没有获取到该参数时返回的默认值，默认是: false
     * @return 参数的值
     */
    fun getBoolean(key: String, defaultValue: Boolean = false): Boolean

    /**
     * 获取String类型参数的值
     * @param key 参数名称
     * @param defaultValue 没有获取到该参数时返回的默认值，默认是: ""
     * @return 参数的值
     */
    fun getString(key: String, defaultValue: String = ""): String

    /**
     * 获取实现Serializable接口参数的值
     * @param key 参数名称
     * @return 参数的值（可能为空）
     */
    fun <T : Serializable> getSerializable(key: String): T?

    /**
     * 获取实现Parcelable接口参数的值
     * @param key 参数名称
     * @return 参数的值（可能为空）
     */
    fun <T : Parcelable> getParcelable(key: String): T?

    /**
     * 获取Parcelable类型ArrayList参数的值
     * @param key 参数名称
     * @return 参数的值（可能为空）
     */
    fun <T : Parcelable> getParcelableArrayList(key: String): ArrayList<T>?
}